package com.cskaoyan.object01.syntax.constructor;

/*
       构造方法的作用: 在创建对象的时候，给对象的成员变量赋予初值

       构造方法的的语法:
       1. 构造方法也是一种方法，定义语法和成员有相似之处
       2. 但是，和普通成员方法定义语法，又去被
          a. 构造方法的方法名固定，和类名相同
          b. 构造方法没有返回值，定义的时候没有返回值类型

      构造方法的工作原理:
      1. 在new对象的时候，给构造方法传递参数值
      2. 构造方法在运行的时候，接受外部传递的参数值
      3. 在构造方法的方法体中，根据我们自己定义好的赋值语句，
         完成对对象成员变量值的初始化(给对象的成员变量赋初值)

     注意事项：
    1） 构造方法可以重载(也要满足方法的重载条件)

    2) 当一个类中，没有定义任何一个构造方法的时候，jvm会自动给我们的类中，
       添加一个默认构造(无参构造方法)方法，但是如果一个类中，一旦定义了哪怕只有一个构造方法
       ，此时jvm就不会自动给该类添加默认构造方法(无参构造方法)

    3) 关于构造方法的执行时机，构造方法，在创建对象的最后一步，才会执行
 */
public class Demo2 {

    public static void main(String[] args) {
        // 构造方法是在创建对象使用的
        String name = "zs";
        int age = 19;
        int studentId = 1;

        Student stu = new Student(name, age, studentId);
//        System.out.println("name = " + stu.name
//                + ", age = " + stu.age + ", studentId = " + stu.studentId);


        // 创建对象
        //  以类似于方法调用的形式，在new对象的时候声明所使用的构造方法
        Student student = new Student();


    }
}


class Student {

    String name;

    int age;

    int studentId;

    // 自己定义无参默认构造方法
    public Student() {
        System.out.println("Student()");
    }

    // 构造方法的重载
    public Student(String stuName) {
       name = stuName;
    }

    // 定义构造方法
    public Student(String stuName, int stuAge, int stuId) {
        // 我们自己在构造方法中，通过赋值语句完成，成员变量值的初始化
        name = stuName;
        age = stuAge;
        studentId = stuId;
    }



    public void eat() {
        System.out.println("吃饭ing");
    }

}
